package quanlydoanra.themmoi;
import java.util.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import quanlydoanra.utils.TableNguoiDi;
import quanlydoanra.utils.managerID;
import quanlydoanra.utils.truyXuatDatabase;
import quanlydoanra.utils.Utils;
import utils.DateUtils;
import utils.UtilsOnScopes;

import dbutil.ConnectDB;

public class NguoiDi {
	private int id;
	private String tenNguoiDi;
	private String cmnd;
	private String soHC;
	private String namSinh;
	private String gioiTinh;
	private String coQuan;
	private String chucVu;
	private boolean trangThaiDi = false;
	private String maDoan;
	private boolean state = false;
	private int autoInsertNhatKyflag;
	private String error="";
	private List<TableNguoiDi> listTableNguoiDi =null;
	private String thaoTac ="";
	
	public NguoiDi(){}
	public NguoiDi(String tenNguoiDi, String cmnd, String soHC,
			boolean trangThaiDi, String maDoan) {
		this.tenNguoiDi = tenNguoiDi;
		this.cmnd = cmnd;
		this.soHC = soHC;
		this.trangThaiDi = trangThaiDi;
		this.maDoan = maDoan;
		
	}


	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getTenNguoiDi() {
		if(this.tenNguoiDi == null) this.tenNguoiDi ="";
		return tenNguoiDi;
	}

	public void setTenNguoiDi(String tenNguoiDi) {
		this.tenNguoiDi = tenNguoiDi;
	}
	
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	public String getCmnd() {
		if(this.cmnd == null) this.cmnd ="";
		return cmnd;
	}
	public void setCmnd(String cmnd) {
		this.cmnd = cmnd;
	}

	public String getSoHC() {
		return soHC;
	}

	public void setSoHC(String soHC) {
		this.soHC = soHC;
	}

	public boolean isTrangThaiDi() {
		return trangThaiDi;
	}

	public void setTrangThaiDi(boolean trangThaiDi) {
		this.trangThaiDi = trangThaiDi;
	}

	public String getMaDoan() {
		HttpSession ses = UtilsOnScopes.getSession();
		return (String) ses.getAttribute("maDoanRa");
	}
	public boolean isState() {
		return state;
	}
	public void setState(boolean state) {
		this.state = state;
	}
	public int getAutoInsertNhatKyflag() {
		HttpSession ses = UtilsOnScopes.getSession();
		int acc = (Integer)ses.getAttribute("phanbiet");
		if(acc == 200 && this.autoInsertNhatKyflag == 1){//tu trang them moi doan ra{
			truyXuatDatabase.insertNhatKyXoaSua(UtilsOnScopes.getUserName(), DateUtils.utilDateToSqlDate(new Date()), this.maDoan, thaoTac, "Sửa thông tin thành viên đoàn ra");
		}
		return autoInsertNhatKyflag;
	}
	public void setAutoInsertNhatKyflag(int autoInsertNhatKyflag) {
		this.autoInsertNhatKyflag = autoInsertNhatKyflag;
	}
	public String getNamSinh() {
		return namSinh;
	}
	public void setNamSinh(String namSinh) {
		this.namSinh = namSinh;
	}
	public String getGioiTinh() {
		return gioiTinh;
	}
	public void setGioiTinh(String gioiTinh) {
		this.gioiTinh = gioiTinh;
	}
	public String getCoQuan() {
		return coQuan;
	}
	public void setCoQuan(String coQuan) {
		this.coQuan = coQuan;
	}
	public String getChucVu() {
		return chucVu;
	}
	public void setChucVu(String chucVu) {
		this.chucVu = chucVu;
	}
	public void setListTableNguoiDi(List<TableNguoiDi> listTableNguoiDi) {
		this.listTableNguoiDi = listTableNguoiDi;
	}
	public void setMaDoan(String maDoan) {
		HttpSession ses = UtilsOnScopes.getSession();
		String acc = (String)ses.getAttribute("maDoanRa");
		this.maDoan = acc;
	}
	
	/**************************************
	 * Method name		: getListTableNguoiDi
	 * Return type		: List<TableNguoiDi>
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public List<TableNguoiDi> getListTableNguoiDi() {
		List<TableNguoiDi> list = new ArrayList<TableNguoiDi>();
		HttpSession ses = UtilsOnScopes.getSession();
		String mD =  (String) ses.getAttribute("maDoanRa");
		String SQL = "select * from dsnguoidi as DS, canhan as CN where DS.iddoanra ='"+mD+"' and DS.cmnd = CN.cmnd ORDER BY tennguoidi";
		System.out.println("SQL "+SQL);
		ArrayList<HashMap<String, Object>> array = ConnectDB.getDataTypeList(SQL);
		if (array.size() > 0) {
			HashMap<String, Object> hash = new HashMap<String, Object>();
			int stt = 0;
			for (int i = 0; i < array.size(); i++) {
				stt = i + 1;
				hash = (HashMap<String, Object>) array.get(i);
				TableNguoiDi table = new TableNguoiDi();
				table.setStt(String.valueOf(stt));
				table.setId(hash.get("id").toString());
				table.setTenNguoiDi(hash.get("tennguoidi").toString());
				table.setSoHC(hash.get("sohc").toString());
				table.setCmnd(hash.get("cmnd").toString());
				table.setTrangThaiDi(Boolean.parseBoolean(hash.get("trangthaidi").toString()));
				table.setCoQuan(hash.get("coquan").toString());
				String gioitinh ="";
				boolean b = Boolean.parseBoolean(hash.get("cmnd").toString());
				if (b == true) gioitinh = "Nam";
				else gioitinh = "Nữ";
				table.setGioiTinh(gioitinh);
				table.setNamSinh(hash.get("namsinh").toString());
				table.setChucVu(hash.get("chucvu").toString());
				list.add(table);
			}
		}
		this.listTableNguoiDi = list;
		return listTableNguoiDi;
	}
	/**************************************
	 * Method name		: checkInputValue
	 * Return type		: boolean
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public boolean checkInputValue(){
		boolean result = false;
		Date[] date = truyXuatDatabase.getDateInDoanRa(this.getMaDoan());
		String str ;
		if(this.soHC == null || this.soHC.equals("")){
				result = false;
				this.setError("Số Hộ chiếu chưa được nhập");
			}
		else if(this.kiemTraSoHC() == false){
			System.out.println("Vao so HC ko ton tai");
			this.setCmnd("");
			this.setTenNguoiDi("");
			this.setError("Số HC không tồn tại trong CSDL");
			result = false;		
		}
		//kiem tra so lan xuat hien cua thanh vien
		else if(truyXuatDatabase.kiemTraThanhVien(this.cmnd,this.getMaDoan()) && status  == 0){
			this.setError("Thành viên đã có trong danh sách người đi");
			result = false;
		}
		else if(truyXuatDatabase.kiemTraThanhVienDaVeChua(this.cmnd,DateUtils.utilDateToSqlDate(date[1]),DateUtils.utilDateToSqlDate(date[3])) && status == 0){
			this.setError("Thành viên này hiện đang ở nước ngoài");
			result = false;
		}
		//kiem tra ngay nop thuc te và ngay nop yeu cau( ngay nop thuc te >= ngay yeu cau nop
		else {
			this.setError("");
			result = true;
		}
		return result;
	}
	
	//Method
	/**************************************
	 * Method name		: kiemTraSoHC
	 * Return type		: boolean
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public boolean kiemTraSoHC(){
		boolean result =false;
		boolean check = truyXuatDatabase.kiemTraSoHC(this.soHC);
		if (check){
			result =true;//co ton tai
		}
		else {
			result =false;
		}
		return result;
	}	
	
	int i =0;
	int capNhatTaoMoi = 0;
	int status =0;
	/**************************************
	 * Method name		: taoMoiNguoiDi
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String taoMoiNguoiDi(){
		status = 0;
		this.setState(false);
		HttpServletRequest request = UtilsOnScopes.getRequest();
		String id = request.getParameter("id");
		if(id != null){//dang sua thanh vien
			this.setError("Quá trình cập nhật đang diễn ra.Không thể tạo mới thành viên");
		}
		else {
	
		String result = "";
		this.trangThaiDi = true;
		if(this.getMaDoan() != null){
			if(this.checkInputValue()){
		try{
			String sql = "insert into dsnguoidi(iddoanra,tennguoidi,cmnd,sohc,trangthaidi) values('"+this.getMaDoan()+"','"+this.tenNguoiDi+"','"+this.cmnd+"','"+this.soHC+"',"+this.trangThaiDi+")";
				
		System.out.println("SQL "+sql);
		int acc = truyXuatDatabase.insertData(sql);
		if (acc == 1){//ko insert dc	
			error = "Thành viên được thêm vào danh sách người đi";
			result = "success";
			autoInsertNhatKyflag =1;
			thaoTac = "Sửa(Thêm thành viên)";
			i++;
			this.setId(truyXuatDatabase.getIDThanhVien(this.getMaDoan(), soHC));
			TableNguoiDi tableNguoiDi = new TableNguoiDi();
			tableNguoiDi.setId(this.getId()+"");
			tableNguoiDi.setSoHC(soHC);
			tableNguoiDi.setStt(i+"");
			tableNguoiDi.setTenNguoiDi(tenNguoiDi);
		//this.listTableNguoiDi.add(tableNguoiDi);
			this.resetData();
			}
		else {			
			error ="Chưa thêm được cá nhân vào danh sách người đi ";
			result = "fail";
			this.setId(-1);
		}
		}
		catch(Exception ex){
			System.out.println("Loi");
		}
		}
			else {
			result = "fail";
			}
		}
		else {
			result = "fail";
			error ="Đoàn ra chưa được tạo!";
			this.setError(error);
		}
		}
			return "finish_ThanhVien";
	}
	
	/**************************************
	 * Method name		: hoanThanhThemMoi
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String hoanThanhThemMoi(){
		this.setState(false);
		this.listTableNguoiDi = null;
		this.error ="";
		this.resetData();
		HttpSession ses = UtilsOnScopes.getSession();
		int acc = (Integer)ses.getAttribute("phanbiet");
		if(acc == 100)//tu trang them moi doan ra
			return "trovetrangthemmoi";
		else { //tu trang sua doan ra
			this.maDoan = null;
			return "trovetrangsuadoanra";
		}
		
	}
	/**************************************
	 * Method name		: getInfor
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String getInfor(){
	String[] str = truyXuatDatabase.layThongTinCaNhan(this.soHC);
	this.setCmnd(str[0]);
	this.setTenNguoiDi(str[1]);
	this.setNamSinh(str[2]);
	this.setGioiTinh(str[3]);
	this.setCoQuan(str[4]);
	this.setChucVu(str[5]);
	System.out.println("CMND "+str[0]+ " TEN "+str[1]);
	  return "finish_checkinfor";
	}
	/**************************************
	 * Method name		: resetData
	 * Return type		: void
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public void resetData(){
		this.setState(false);
		this.soHC =null;
		this.tenNguoiDi =null;
		this.cmnd =null;
		this.namSinh = null;
		this.gioiTinh = null;
		this.chucVu = null;
		this.coQuan = null;
		this.trangThaiDi =false;
	
	}
	/**************************************
	 * Method name		: xoanguoidi
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String xoanguoidi(){
		String result = "";
		HttpServletRequest request = UtilsOnScopes.getRequest();
		String id = request.getParameter("id");
		String STT = request.getParameter("stt");
		if(truyXuatDatabase.deleteNguoiDi(Integer.parseInt(id))){
			this.setError("Thành viên có mã "+id+ " đã bị xóa khỏi danh sách");
			autoInsertNhatKyflag =1;
			thaoTac ="Xóa(xóa thành viên)";
			
		}
		else {
			this.setError("Quá trình xóa bị lỗi");
			
		}
		return "finish_ThanhVien";
	}
	String strSoHC = "";
	/**************************************
	 * Method name		: loadThongTin
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String loadThongTin(){
		this.setState(true);
		HttpServletRequest request = UtilsOnScopes.getRequest();
		String id = request.getParameter("id");
		System.out.println("ID "+id);
		if(id == null){
			this.setError("Đang thêm mới thành viên. Không thể cập nhật");
		}
		else {
		String soHC = request.getParameter("soHC");
		strSoHC = soHC;
		String cmnd = request.getParameter("cmnd");
		String ten = request.getParameter("tenNguoiDi");
		String trangThaiDi = request.getParameter("trangThaiDi");
		String chucVu = request.getParameter("chucVu");
		String coQuan = request.getParameter("coQuan");
		String namSinh = request.getParameter("namSinh");
		String gioiTinh = request.getParameter("gioiTinh");
		
		this.setError("Đang sửa thành viên có mã số "+id+"...");
		
		this.setId(Integer.parseInt(id));
		this.setCmnd(cmnd);
		this.setSoHC(soHC);
		this.setTenNguoiDi(ten);
		this.setTrangThaiDi(Boolean.parseBoolean(trangThaiDi));
		this.setCoQuan(coQuan);
		this.setChucVu(chucVu);
		this.setNamSinh(namSinh);
		this.setGioiTinh(gioiTinh);
		}
		return "finish_ThanhVien";
	}
	/**************************************
	 * Method name		: capNhatThongTin
	 * Return type		: String
	 * Description		:
	 * Created date		: Aug 12, 2008
	 * Author			: Ngoc Diem
	 **************************************/
	public String capNhatThongTin(){
		status = 1;
		this.setState(true);
		String[] str = truyXuatDatabase.layThongTinCaNhan(this.getSoHC());
		System.out.println("CMND "+str[0]+" old "+ this.cmnd);
//		if(!str[0].equals(this.cmnd)){
//			this.setError("Không được thay đổi CMND thành viên");
//		}
//		else {
		if(truyXuatDatabase.updateNguoiDi(this.getMaDoan(), tenNguoiDi, cmnd, soHC, trangThaiDi)){
			this.setError("Thành viên có mã "+id+ " đã được cập nhật thành công");
			autoInsertNhatKyflag =1;
			thaoTac = "Sửa (Sửa thành viên)";
		this.resetData();
			
		}
		else {
			this.setError("Quá trình cập nhật thông tin bị lỗi");
			System.out.println("khong them dc");
		}
	
		return "finish_ThanhVien";
	
	}


}
